#ifndef XMLINFONOM_HPP
#define XMLINFONOM_HPP

#include "XmlInfoIdentifiant.hpp"

/**
 * Classe définissant les objets qui ont un nom : les monstres, les
 * contrats, ...
 *
 * @author Johan "Solo" Luisier
 * @date Octobre 2011
 */
class XmlInfoNom : public XmlInfoIdentifiant
{
public:
    /** Constructeur standard.
      * Initialise la classe mère et le nom.
      *
      * @param[in] nomFichier nom du fichier XML.
      * @param[in] id identifiant de l'objet.
      * @param[in] nom nom de l'instance.
      */
    XmlInfoNom( const QString& nomFichier, const unsigned& id,
                const QString& nom );
    /**
      * Permet de dupliquer une instance de @c XmlInfoNom.
      *
      * @param[in] nom instance à dupliquer.
      */
    XmlInfoNom( const XmlInfoNom& nom );
    /** Destructeur.
      * Le destructeur n'a rien de spécial à faire.
      */
    virtual ~XmlInfoNom();
    /** Méthode permettant de créer une instance depuis une balise XML.
      * Une balise permet de définir une instance à partir de ses attributs :
      * chaque attribut correspond à un membre de la classe.
      *
      * @param[in] nomFichier nom du fichier XML.
      * @param[in] infos liste des valeurs utilisées, indexée par le nom de
      * l'attribut.
      *
      * @return une instance de @c XmlInfoNom qui est vide si une erreur se
      * produit lors de la lecture des informations.
      */
    static XmlInfoNom creeInstance( const QString& nomFichier,
                                    const QHash< QString, QString > * infos );
    /** Opérateur d'affectation.
      * Permet de copier le contenu d'une instance dans une autre.
      *
      * @param[in] nom instance à copier dans l'instance courante.
      *
      * @return une référence sur l'instance courante.
      */
    XmlInfoNom& operator=( const XmlInfoNom& nom );
    /** Permet d'accéder à Nom.
      *
      * @return une référence constante sur Nom.
      */
    const QString& nom() const;
    /** Permet de changer la valeur de Nom.
      *
      * @param[in] nom nouvelle valeur de Nom.
      */
    void setNom( const QString& nom );
protected:
    /** Constructeur par défaut.
      * Est utilisé pour renvoyer une instance invalide depuis creeInstance si
      * une erreur est détectée dans la lecture des valeurs.
      */
    XmlInfoNom();
    /** Constructeur.
      * Est utilisé pour renvoyer une instance invalide depuis creeInstance si
      * une erreur est détectée dans la lecture des valeurs.
      */
    XmlInfoNom( const XmlInfoIdentifiant& id, const QString& nom = QString() );
    /**
      * Nom de l'objet (prénom de l'enfant à terroriser, nom de
      * l'équipement, ...).
      */
    QString Nom;
};

#endif // XMLINFONOM_HPP
